﻿/* Validações de Formulário */
/* Para validar um text do tipo data, por exemplo, basta adicionar data="sim" e texto="Data" à tag input type="text" */
/*
 * Atributos aceitos:
 * 	obrigatorio="sim" //Verifica se o campo esta vazio
 * 	email="sim"  
 *	inteiro="sim"
 *	inteiroPositivo="sim"
 * 	real="sim"	
 *	realPositivo="sim"
 *	realDuasCasas="sim"
 *	realDuasCasasPositivo="sim" 
 *	cpf="sim"
 *	data="sim"
 *	hora="sim"
 *	no <form> basta adicionar onSubmit="return validaFormulario(this);"
 */

function ERROCAMPOVAZIO(texto) {
	if (texto == null) texto = "";
		return "${pageContext.idioma["negociacao.validacao.erroCampoVazio"]} " + texto + "!";		
}

function CAMPOINVALIDO(texto) {
	if (texto == null) texto = "";
		return "${pageContext.idioma["negociacao.validacao.erroCampo"]} " + texto + "\n ${pageContext.idioma["negociacao.validacao.erro"]} ";		
}

function validaCPF(cpf) {		
	/* Verificando se o CPF esta no formato xxx.xxx.xxx-xx */		
	var padraoCpf = /^\d{3}[.]\d{3}[.]\d{3}[-]\d{2}$/;	
	if (!(padraoCpf.test(cpf))) {
		return "${pageContext.idioma["negociacao.validacao.erroFormatoCPF"]}";		
	}		
	/* Pegando so os numeros do CPF */
	var cpfNumeros = cpf.substring(0,3) + cpf.substring(4,7) + cpf.substring(8,11) + cpf.substring(12,14);
	
	var novePrimeiros = cpfNumeros.substring(0,9);	
	if (
			novePrimeiros == "000000000" || novePrimeiros == "111111111" || novePrimeiros == "222222222" || novePrimeiros == "333333333" ||
			novePrimeiros == "444444444" || novePrimeiros == "555555555" || novePrimeiros == "666666666" || novePrimeiros == "7777777" ||
			novePrimeiros == "888888888" || novePrimeiros == "999999999"
		)
	{
		return "${pageContext.idioma["negociacao.validacao.erroCPFInvalido"]}";
	}
	
	//Calculo do primeiro DV (digito verificador)
	var dv = -1;
	var soma = 0;
	for (i = 0; i < 9; i++) {
		soma += cpfNumeros[i] * (10-i);		
	}
	resto = soma % 11;
	if (resto < 2)
		dv = 0;
	else
		dv = 11 - resto;
	
	if (cpfNumeros[9] != dv) {		
		return "${pageContext.idioma["negociacao.validacao.erroCPFInvalido"]}";		
	}
	
	//Calculo do segundo DV
	dv = -1;
	soma = 0;
	for (i = 0; i < 10; i++) {
		soma += cpfNumeros[i] * (11-i);		
	}
	resto = soma % 11;
	if (resto < 2)
		dv = 0;
	else
		dv = 11 - resto;
	
	if (cpfNumeros[10] != dv) {		
		return "${pageContext.idioma["negociacao.validacao.erroCPFInvalido"]}";
	}	
	return "";
}

function validaData(data){	
	#if ( $pageContext.getStrIdioma().equalsIgnoreCase("pt") )	
		var padraoData = /^(0[1-9]|[12][0-9]|3[01])[/](0[1-9]|1[012])[/](19|20)\d\d$/;
		var dia = data.substr(0,2);
		var mes = data.substr(3,2);
	#else
		var padraoData = /^(0[1-9]|1[012])[/](0[1-9]|[12][0-9]|3[01])[/](19|20)\d\d$/;
		var mes = data.substr(0,2);
		var dia = data.substr(3,2);
	#end 
	if ( !(padraoData.test(data) ) ) {
		return "${pageContext.idioma["negociacao.validacao.erroFormatoDataInvalida"]}";		
	}

	var ano = data.substr(6,4);
	
	var anobissexto = 0;
	if ( ano%400==0 || (ano%4==0 && ano%100!=0) )
		anobissexto=1;
	if (mes<=0 || mes>12)
		return "${pageContext.idioma["negociacao.validacao.erroDataInvalida"]}";
	if (dia<1) 
		return "${pageContext.idioma["negociacao.validacao.erroDataInvalida"]}";
	if (mes == 2 && anobissexto==1 && dia>29)
		return "${pageContext.idioma["negociacao.validacao.erroDataInvalida"]}";
	if (mes == 2 && anobissexto==0 && dia>28)
		return "${pageContext.idioma["negociacao.validacao.erroDataInvalida"]}";
	if ((mes == 4 || mes == 6 || mes == 9 || mes == 11) && dia>30)
		return "${pageContext.idioma["negociacao.validacao.erroDataInvalida"]}";
	if (dia>31)
		return "${pageContext.idioma["negociacao.validacao.erroDataInvalida"]}";
	return "";
}

function validaEmail(email) {
	var padraoEmail = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;	
	if ( !(padraoEmail.test(email) ) ) {
		return "${pageContext.idioma["negociacao.validacao.erroEmailInvalido"]}";		
	}
	return "";
}

function validaInteiro(valor) {	
	var padraoValor = /^(-)?\d+$/;
	if ( !(padraoValor.test(valor)) ){
		return "${pageContext.idioma["negociacao.validacao.erroNumInvalido"]}";			
	}
	return "";
}

function validaInteiroPositivo(valor) {	
	var padraoValor = /^\d+$/;
	if ( !(padraoValor.test(valor)) ){
		return "${pageContext.idioma["negociacao.validacao.erroInteiroPositivo"]}";			
	}
	return "";
}

function validaReal(id) {
	var padraoDecimal = /^((-)?(\d)+|(-)?(\d)+[.](\d){1}|(-)?(\d)+[.](\d){2})$/;
	if ( !(padraoDecimal.test(id)) ){
		return "${pageContext.idioma["negociacao.validacao.erroNumInvalido"]}";			
	}
	return "";	
}

function validaRealPositivo(id) {
	var padraoDecimal = /^((\d)+|(\d)+[.](\d){1}|(\d)+[.](\d){2})$/;
	if ( !(padraoDecimal.test(id)) ){
		return "${pageContext.idioma["negociacao.validacao.erroRealPositivo"]}";			
	}
	return "";	
}

function validaRealDuasCasas(id) {
	var padraoDecimal = /^(-)?(\d)+[.](\d){2}$/;
	if ( !(padraoDecimal.test(id)) ){
		return "${pageContext.idioma["negociacao.validacao.erroNumInvalido"]}";			
	}
	return "";	
}

function validaRealDuasCasasPositivo(id) {
	var padraoDecimal = /^(\d)+[.](\d){2}$/;
	if ( !(padraoDecimal.test(id)) ){
		return "${pageContext.idioma["negociacao.validacao.erroNumInvalido"]}";			
	}
	return "";	
}

function validaSenha(id) {
	try {
		var senha = document.getElementById(id).value;
		var confSenha = document.getElementById("confsenha").value;
		if (senha != confSenha) {
			return "${pageContext.idioma["negociacao.validacao.erroSenha"]}";
		}
		return "";
	} catch (e) { return ""; }	
}

function validaHora(id) {
	var padraoHora = /^\d\d[:]\d\d$/;
	var txt = document.getElementById(id);

	if ( !(padraoHora.test(txt.value)) ){
		return "${pageContext.idioma["negociacao.validacao.horaInvalida"]}";			
	}
	return "";	
}


function isInputValido(id) {			
	var erro = "";
	var input;
	try {				
		input = document.getElementById(id);
		input.getAttribute("obrigatorio");
	}
	catch (e) { return true; }
		
	if (input.getAttribute("obrigatorio")=="sim") 
	{
		if (input.value!="") {					
			if (input.getAttribute("email")=="sim") {
				erro = validaEmail(input.value);
			}
			else if (input.getAttribute("data")=="sim") {
				erro = validaData(input.value);
			}
			else if (input.getAttribute("inteiro")=="sim") {	
				erro = validaInteiro(input.value);
			}
			else if (input.getAttribute("inteiroPositivo")=="sim") {	
				erro = validaInteiroPositivo(input.value);
			}
			else if (input.getAttribute("real")=="sim") {	
				erro = validaReal(input.value);
			}
			else if (input.getAttribute("realPositivo")=="sim") {	
				erro = validaRealPositivo(input.value);
			}
			else if (input.getAttribute("realDuasCasas")=="sim") {	
				erro = validaReal(input.value);
			}
			else if (input.getAttribute("realDuasCasasPositivo")=="sim") {	
				erro = validaRealPositivo(input.value);
			}
			else if (input.getAttribute("cpf")=="sim") {							
				erro = validaCPF(input.value);
			}
			else if (input.getAttribute("senha")=="sim") {
				erro = validaSenha(id);				
			}
			else if (input.getAttribute("hora")=="sim") {
				erro = validaHora(id);				
			}
		}
		else {			
			alert( ERROCAMPOVAZIO(input.getAttribute("texto")) );
			return false;
		}
	}	
	if (erro != "")
	{
		alert(CAMPOINVALIDO(input.getAttribute("texto")) + erro);
		return false;
	}
	return true;	
}

function validaFormulario(form) {		
	var elementos;
	try {
		elementos = form.elements;
	}
	catch (e) { return true; }
		
	for (i=0; i < elementos.length; i++) {	
		if ( !isInputValido(elementos[i].id) )		
			return false;
	}	
	return true;		
}

function toMin(id) {
	document.getElementById(id).value = document.getElementById(id).value.toLowerCase();
}

/*
 * Para usar esta função:
 * Adicionar: 
 * <input type="text" name="<id>Error" id="<id>Error" value="" readOnly  style="border: 0px;"/>
 * onde <id> deve ser o id do input a ser verificado se está ou não com o caps ligado.
 * adicionar ao input a ser verificado: onKeyPress="checarCapsLock(event, this.id)" 
*/
function checarCapsLock(e, id) {
	kc = e.keyCode?e.keyCode:e.which;
	sk = e.shiftKey?e.shiftKey:((kc == 16)?true:false);
	if(((kc >= 65 && kc <= 90) && !sk)||((kc >= 97 && kc <= 122) && sk))
		document.getElementById(id+'Msg').value = "Caps Lock ativado.";
	else
		document.getElementById(id+'Msg').value = "";  
}	


// **********************************************//
// Funcoes para preencher a data automaticamente //
// 
// adicionar ao input a ser verificado: onKeyUp="digitaData(this,event)"
// *********************************************//
function digitaData(objeto,event){
	if(window.event) // IE
	{
		keynum = event.keyCode;
	}
	else if(event.which) // Netscape/Firefox/Opera
  	{
  		keynum = event.which;
  	}
	if (keynum!=8 && keynum!=37){
		objeto.value=retiraBarras(objeto.value);
		objeto.value=onlyNumbers(objeto.value);
		objeto.value=colocaBarras(objeto.value);
	}
}
function retiraBarras(data){
	var i;
	var novaData = "";
	for (i=0;i<data.length;i++){
		if (data.charAt(i)!='/')
			novaData+=data.charAt(i);
	}
	return novaData;
}

function colocaBarras(data){
	var i;
	//nao coloca barra
	if (data.length<2)
		return data;
	//coloca soh a primeira barra
	if (data.length>=2 && data.length<4){
		return data.substr(0,2)+'/'+data.substr(2,2);
	}
	//coloca as duas barras
	if (data.length>=4){
		return data.substr(0,2)+'/'+data.substr(2,2)+'/'+data.substr(4,4);
	}	
}

function onlyNumbers(text){
	reDecimal = /^\d*$/;
	if (reDecimal.test(text)){
		return text;
	}else{
		var novoText="";		
		for (i = 0; i < text.length; i++) {
			if (isNumericalChar(text.charAt(i))){
				novoText+=text.charAt(i);
			}
		}
		return novoText;
	}
}

//FIM DAS FUNCOES PARA PREENCHER A DATA AUTOMATICAMENTE

